曲線有以下幾種方法
quadraticCurveTo 是 Canvas 2D API 新增二次貝塞爾曲線路徑的。它需要一個點。第一個點是控制,第二個點是方法點。看起來點是當前路徑的最新點,當創建二次貝賽爾曲線之前,可以使用使用 moveTo()方法進行改變。
bezierCurveTo 是Canvas 2D API 繪製第三貝賽茲路線的方法。該方法需要三個點。第一、第二點,第三個點是結束點。繪製貝賽爾沿前,可以通過調用 moveTo()進行修改
還記得嗎? bezierCurveTo 就是我們上一篇章拿來繪製橢圓的方法,但在這裡繪製曲線會過於複雜。
這次我們使用 quadraticCurveTo ,單純是因為使用上比較直覺簡單!來看看程式碼吧
case "curve": // 曲線
  clearCanvas();
  restore();
  //curve toward mouse
  ctx.beginPath();
  ctx.moveTo(secondPoint?.x, secondPoint?.y);
  ctx.quadraticCurveTo(
    point?.x,
    point?.y,
    initialPoint?.x,
    initialPoint?.y
  );
  ctx.stroke();
  break;
  /**
   * 滑鼠點下畫布
   */
  const handleMouseDown = (event: any) => {
    setIsDrawing(true);
    const point = getClientOffset(event);
    setInitialPoint({ ...point });
    switch (tool) {
    ...
      case "curve":
        saveCanvas();
        break;
      default:
        break;
    }
  };
  /**
   * 提起畫筆
   */
  const handleMouseUp = (event: any) => {
    if (isDrawing) {
      setIsDrawing(false);
      setInitialPoint(null);
      lastPoint = null;
      switch (tool) {
        case "curve":
          const point = getClientOffset(event);
          setSecondPoint(point);
          break;
        default:
          break;
      }
    }
  };
完成!
